package bpmlab.shift.bean;

import bpmlab.shift.dao.DAOException;
import bpmlab.shift.dao.DAOFactory;
import bpmlab.shift.dao.service.CaracterizacaoDAO;
import bpmlab.shift.dao.service.EnriquecimentoDAO;
import bpmlab.shift.dao.service.GenericDAO;
import bpmlab.shift.entity.Caracterizacao;
import bpmlab.shift.entity.Embalagem;
import bpmlab.shift.entity.Enriquecimento;
import bpmlab.shift.entity.Pelotizacao;
import bpmlab.shift.entity.Processo;
import bpmlab.shift.entity.Secagem;
import bpmlab.shift.entity.Trituracao;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Mikael Lima
 */
@ManagedBean
@SessionScoped
public class ProcessoBean implements Serializable {

    private final GenericDAO<Processo> dao = DAOFactory.criarGenericDAO(Processo.class);
    private final CaracterizacaoDAO daoCaracterizacao = DAOFactory.criarCaracterizacaoDAO();
    private final EnriquecimentoDAO daoEnriquecimento = DAOFactory.criarEnriquecimentoDAO();

    private Long codigo;
    private Processo processo;
    private Secagem secagem;
    private Trituracao trituracao;
    private Caracterizacao caracterizacao;
    private Enriquecimento enriquecimento;
    private Pelotizacao pelotizacao;
    private Embalagem embalagem;

    private List<Caracterizacao> caracterizacoes;
    private List<Enriquecimento> enriquecimentos;

    public String salvarSecagem() {
        try {
            processo.setSecagem(secagem);
            processo.setAtual(secagem.getLocalSecagem());
            dao.salvar(processo);
            JsfUtil.mensagemSalvoComSucesso();
            return "/restrito/lote/informacao-lote.xhtml";
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoSalvar();
            return null;
        }
    }

    public String salvarTrituracao() {
        try {
            processo.setTrituracao(trituracao);
            processo.setAtual(trituracao.getLocalTrituracao());
            dao.salvar(processo);
            JsfUtil.mensagemSalvoComSucesso();
            return "/restrito/lote/informacao-lote.xhtml";
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoSalvar();
            return null;
        }
    }

    public String salvarPelotizacao() {
        try {
            processo.setPelotizacao(pelotizacao);
            processo.setAtual(pelotizacao.getLocalPelotizacao());
            dao.salvar(processo);
            JsfUtil.mensagemSalvoComSucesso();
            return "/restrito/lote/informacao-lote.xhtml";
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoSalvar();
            return null;
        }
    }
    
    public String salvarEmbalagem() {
        try {
            processo.setEmbalagem(embalagem);
            processo.setAtual(embalagem.getLocalEmbalagem());
            dao.salvar(processo);
            JsfUtil.mensagemSalvoComSucesso();
            return "/restrito/lote/informacao-lote.xhtml";
        } catch (DAOException ex) {
            JsfUtil.mensagemErroAoSalvar();
            return null;
        }
    }

    public void salvarCaracterizacao() {
        try {
            caracterizacao.setProcesso(processo);
            daoCaracterizacao.salvar(caracterizacao);
            caracterizacao = new Caracterizacao();
            caracterizacao.setProcesso(processo);
            JsfUtil.mensagemSalvoComSucesso();
        } catch (Exception e) {
            JsfUtil.mensagemErroAoSalvar();
        }
    }

    public void removerCaracterizacao() {
        try {
            daoCaracterizacao.excluir(caracterizacao);
            caracterizacao = new Caracterizacao();
            caracterizacao.setProcesso(processo);
            JsfUtil.mensagemRemovidoComSucesso();
        } catch (Exception e) {
            JsfUtil.mensagemErroAoRemover();
        }
    }

    public void salvarEnriquecimento() {
        try {
            enriquecimento.setProcesso(processo);
            daoEnriquecimento.salvar(enriquecimento);
            enriquecimento = new Enriquecimento();
            enriquecimento.setProcesso(processo);
            JsfUtil.mensagemSalvoComSucesso();
        } catch (Exception e) {
            JsfUtil.mensagemErroAoSalvar();
        }
    }

    public void removerEnriquecimento() {
        try {
            daoEnriquecimento.excluir(enriquecimento);
            enriquecimento = new Enriquecimento();
            enriquecimento.setProcesso(processo);
            JsfUtil.mensagemRemovidoComSucesso();
        } catch (Exception e) {
            JsfUtil.mensagemErroAoRemover();
        }
    }
    
    public String irParaSecagem() {
        if (processo.getSecagem() == null) {
            secagem = new Secagem();
        } else {
            secagem = processo.getSecagem();
        }
        return "/restrito/secagem/secagem.xhtml";
    }

    public String irParaTrituracao() {
        if (processo.getTrituracao() == null) {
            trituracao = new Trituracao(0, new Date());
        } else {
            trituracao = processo.getTrituracao();
        }
        return "/restrito/trituracao/trituracao.xhtml";
    }

    public String irParaPelotizacao() {
        if (processo.getPelotizacao() == null) {
            pelotizacao = new Pelotizacao();
        } else {
            pelotizacao = processo.getPelotizacao();
        }
        return "/restrito/pelotizacao/pelotizacao.xhtml";
    }

    public String irParaEmbalagem() {
        if (processo.getEmbalagem() == null) {
            embalagem = new Embalagem();
        } else {
            embalagem = processo.getEmbalagem();
        }
        return "/restrito/embalagem/embalagem.xhtml";
    }
    
    public String irParaCaracterizacao() {
        caracterizacao = new Caracterizacao();
        return "/restrito/caracterizacao/caracterizacao.xhtml";
    }

    public String irParaEnriquecimento() {
        enriquecimento = new Enriquecimento();
        return "/restrito/enriquecimento/enriquecimento.xhtml";
    }


    public String buscarProcesso() {
        processo = dao.obter(codigo);
        return "/restrito/lote/informacao-lote.xhtml";
    }

    public List<Caracterizacao> getCaracterizacoes() {
        caracterizacoes = daoCaracterizacao.obterPorProcesso(processo);
        return caracterizacoes;
    }

    public List<Enriquecimento> getEnriquecimentos() {
        enriquecimentos = daoEnriquecimento.obterPorProcesso(processo);
        return enriquecimentos;
    }

    public Processo getProcesso() {
        return processo;
    }

    public void setProcesso(Processo processo) {
        this.processo = processo;
    }

    public Long getCodigo() {
        return codigo;
    }

    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    public Secagem getSecagem() {
        return secagem;
    }

    public void setSecagem(Secagem secagem) {
        this.secagem = secagem;
    }

    public Trituracao getTrituracao() {
        return trituracao;
    }

    public void setTrituracao(Trituracao trituracao) {
        this.trituracao = trituracao;
    }

    public Caracterizacao getCaracterizacao() {
        return caracterizacao;
    }

    public void setCaracterizacao(Caracterizacao caracterizacao) {
        this.caracterizacao = caracterizacao;
    }

    public Enriquecimento getEnriquecimento() {
        return enriquecimento;
    }

    public void setEnriquecimento(Enriquecimento enriquecimento) {
        this.enriquecimento = enriquecimento;
    }

    public Pelotizacao getPelotizacao() {
        return pelotizacao;
    }

    public void setPelotizacao(Pelotizacao pelotizacao) {
        this.pelotizacao = pelotizacao;
    }

    public Embalagem getEmbalagem() {
        return embalagem;
    }

    public void setEmbalagem(Embalagem embalagem) {
        this.embalagem = embalagem;
    }

}
